#pragma once

#include "hMapNode.h"

template <typename Key, typename Val>
hMap<Key, Val>::hMap()
{
	_root = new hMapNode<Key, Val>(this);
}

template <typename Key, typename Val>
hMap<Key, Val>::~hMap()
{
	delete _root;
}

template <typename Key, typename Val>
template<typename... Args>
void hMap<Key, Val>::emplace(Key k, Args... args)
{
	_root->emplaceCallback(k, args...);
}

template <typename Key, typename Val>
void hMap<Key, Val>::erase(Key k)
{
	_root->eraseCallback(k);
}

template <typename Key, typename Val>
std::ostream& hMap<Key, Val>::fillDebug(std::ostream& os) const
{
	return _root->fillDebugCallback(os);
}
